/**************************************************************************************
 *
 * @(#) ApiIdempotent.java
 * @Package com.jgdt.jgdtkasannong_university_gene_backend.aspect.idempotent
 **************************************************************************************/
package com.jgdt.jgdtkasannong_university_gene_backend.aspect.idempotent;

import org.springframework.core.annotation.AliasFor;

import java.lang.annotation.*;

/**
 * api 接口幂等控制 自定义注解
 * Target：用于明确注解用于目标类的哪个位置
 * Retention：用于标识的生命周期
 *            RUNTIME:生命周期持续到运行时，能够通过反射获取到
 * Documented：是否需要企业认证切面
 *
 * @author huangan
 * @date 2020/xx/xx
 * @desc 自定义注解，功能：结合aop 实现自定义方法
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ApiIdempotent {
    /**
     * 使用value值，在使用注解的时候，不需要写@ApiIdempotent(value=xxx）,直接写@ApiIdempotent(xxx）即可
     */
    String value() default "";

    /**
     * 别名使用value，所以在使用注解时，既可以写@ApiIdempotent(xxx），也可以写@ApiIdempotent(description=xxx）
     */
    @AliasFor("value")
    String description() default "";


    /**
     * 幂等控制 接口名称code
     */
    String apiNameCode() default "";

    /**
     * 幂等控制 幂等时长 单位秒 默认8秒
     */
    long idempotentTime() default 8;

    /**
     * 幂等控制  异常提示
     */
    String apiErrMsg() default "请勿频繁操作!";
}




